package work.test01waitandnotify1;

//取包裹
public class WithdrawParcel implements Runnable {
    @Override
    public void run() {
        /*
        1、需要取出的包裹数量
        2、判断是否有足够的包裹可取，
            如果有:则取出包裹
                 修改取快递后包裹箱的数量
            如果没有:则进入等待，等快递员存入包裹后
         */
        while (true) {
            //获取锁
            ParcelBox.getLock().lock();
            try {
                //需要取出的包裹数量（随机取5个）
                int withdrawNum = (int)(Math.random() * 5 + 1);
                //判断是否有足够的包裹可取，
                if (ParcelBox.getParcelNum() < withdrawNum) {//如果没有:则进入等待，等快递员存入包裹后
                    System.out.println("要取出的快递不足，等待快递员存入快递...");
                    ParcelBox.getNewDeposit().await();
                }else {
                    //如果有:则取出包裹
                    //修改取快递后包裹箱的数量
                    ParcelBox.setParcelNum(ParcelBox.getParcelNum() - withdrawNum);
                    System.out.println(Thread.currentThread().getName() + "取出了" + withdrawNum + "个包裹,包裹箱还剩下" +
                            ParcelBox.getParcelNum() + "个包裹");
                    ParcelBox.getNewDeposit().signalAll();
                }
                Thread.sleep(100);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            } finally {
                //释放锁
                ParcelBox.getLock().unlock();
            }
        }
    }
}
